<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>适配器模式</title>
    <script type="text/javascript">
        /**
         * 适配器模式：将一个类的接口转换成客户希望的另一个接口，
         *            适配器模式让那些不兼容的类可以一起工作。
         * 适配器模式别名为包装类（wrapper）模式，它可以作为类结构模型
         *
         * 使用场景：  1、系统需要现有的类，但是现有类不兼容。
         *            2、需要建立一个可以重复的使用的类，用于一些彼此关系不大的的类。
         *               并易于扩展，一边面对将来会出显的类。
         *            3、需要一个统一的输出接口，但是输入类型不可知。
         * 使用的例子：vue的计算属性
         * @constructor
         */
        function Adapter() {

        }
        Adapter.prototype = {
            constructor:Adapter,
            specificRequest(){
                return "标准接头"
            }
        }
        /**
         * @param adapter
         * @constructor
         */
        function Target(adapter) {
            adapter ? this.adapter = adapter:this.adapter = new Adapter()
        }
        Target.prototype = {
            constructor:Target,
            request(){
                let info = this.adapter.specificRequest()
                return `${info} ---> 国家标准接头`
            }
        }

        /**
         *
         * @param target
         * @constructor
         */
        function Client(target) {
            target?this.target = target:this.target = new Target()
        }
        Client.prototype = {
            constructor:Client,
            do(){
                return this.target.request()
            }
        }

        const client = new Client()
        console.log(client.do())
    </script>
</head>
<body>

</body>
</html>